package com.qabaco.odondata.model.entities;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@NamedQueries({
  @NamedQuery(name = "Tema.findAll", query = "select o from Tema o")
})
@Table(name = "\"temas\"")
public class Tema implements Serializable {
    private String descripcion;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    private Integer id;
    @Column(name="ID_IMAGENES_GRP")
    private Integer idImagenesGrp;
    @Column(name="ID_PADRE")
    private Integer idPadre;
    @Column(name="ID_VIDEOS_GRP")
    private Integer idVideosGrp;
    private Integer tipo;
    private String titulo;
    @Column(name="PALABRA_CLAVE")
    private String key;
    @Column(name="ID_OPCIONES")
    private Integer idOpciones;
    
    private String pregunta;
    
    @Transient
    private String preguntaOpciones;
    
    @Transient
    private List<Tema> listaTemas = new ArrayList<Tema>();
    
    @Transient
    private List<Imagen> listaImagenes;
    
    @Transient
    private List<Video> listaVideos;
    
    @Transient         
    private Integer codImagenPri;  //Deprecado
    
    @Transient         
    private String nombreImagenPri;
    
    @Transient         
    private String nombreVideoPri;
    
    @Transient // este parametro es utilizado como una marca cuando no se setea el atributo listaTemas, para que se pueda saber si este tema tiene o no subtemas
    private Boolean tieneHijos;

    public Tema() {
    }

    public Tema(String descripcion, Integer id, Integer idImagenesGrp,
                Integer idPadre, Integer idVideosGrp, Integer tipo,
                String titulo) {
        this.descripcion = descripcion;
        this.id = id;
        this.idImagenesGrp = idImagenesGrp;
        this.idPadre = idPadre;
        this.idVideosGrp = idVideosGrp;
        this.tipo = tipo;
        this.titulo = titulo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getIdImagenesGrp() {
        return idImagenesGrp;
    }

    public void setIdImagenesGrp(Integer idImagenesGrp) {
        this.idImagenesGrp = idImagenesGrp;
    }

    public Integer getIdPadre() {
        return idPadre;
    }

    public void setIdPadre(Integer idPadre) {
        this.idPadre = idPadre;
    }

    public Integer getIdVideosGrp() {
        return idVideosGrp;
    }

    public void setIdVideosGrp(Integer idVideosGrp) {
        this.idVideosGrp = idVideosGrp;
    }

    public Integer getTipo() {
        return tipo;
    }

    public void setTipo(Integer tipo) {
        this.tipo = tipo;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public void setListaTemas(List<Tema> listaTemas) {
        this.listaTemas = listaTemas;
    }

    public List<Tema> getListaTemas() {
        return listaTemas;
    }

    public void setListaImagenes(List<Imagen> listaImagenes) {
        this.listaImagenes = listaImagenes;
    }

    public List<Imagen> getListaImagenes() {
        return listaImagenes;
    }

    public void setIdOpciones(Integer idOpciones) {
        this.idOpciones = idOpciones;
    }

    public Integer getIdOpciones() {
        return idOpciones;
    }

    public void setPregunta(String pregunta) {
        this.pregunta = pregunta;
    }

    public String getPregunta() {
        return pregunta;
    }

    public void setPreguntaOpciones(String preguntaOpciones) {
        this.preguntaOpciones = preguntaOpciones;
    }

    public String getPreguntaOpciones() {
        return preguntaOpciones;
    }

    public void setListaVideos(List<Video> listaVideos) {
        this.listaVideos = listaVideos;
    }

    public List<Video> getListaVideos() {
        return listaVideos;
    }
    
    public void setCodImagenPri(Integer codImagenPri) {
        this.codImagenPri = codImagenPri;
    }
  
    public Integer getCodImagenPri() {
        if (getListaImagenes() != null && getListaImagenes().size() > 0)
            codImagenPri = getListaImagenes().get(0).getCodImagen(); // Codigo de imagen principal
        else 
            codImagenPri = null;
        return codImagenPri;
    }

    public void setNombreImagenPri(String nombreImagenPri) {
        this.nombreImagenPri = nombreImagenPri;
    }

    public String getNombreImagenPri() {
        if (getListaImagenes() != null && getListaImagenes().size() > 0)
            nombreImagenPri = getListaImagenes().get(0).getNombre(); // Nombre de imagen principal
        else 
            nombreImagenPri = null;
        return nombreImagenPri;
    }


    public void setKey(String key) {
        this.key = key;
    }

    public String getKey() {
        return key;
    }

    public void setNombreVideoPri(String nombreVideoPri) {
        this.nombreVideoPri = nombreVideoPri;
    }

    public String getNombreVideoPri() {
        if (getListaVideos() != null && getListaVideos().size() > 0)
            nombreVideoPri = getListaVideos().get(0).getNombre(); // Nombre de video principal
        else 
            nombreVideoPri = null;
        return nombreVideoPri;
    }

    public void setTieneHijos(Boolean tieneHijos) {
        this.tieneHijos = tieneHijos;
    }

    public Boolean getTieneHijos() {
        return tieneHijos;
    }
}
